C এর মাধ্যমে TCP এবং UDP Server-Client উদাহরণ

Computer Programming - ইউনিক্স সকেট (Unix Socket) Socket Programming in C (C ভাষায় Socket Programming) |
215
215

C এর মাধ্যমে TCP এবং UDP Server-Client উদাহরণ

C প্রোগ্রামিং ভাষায় TCP এবং UDP সকেট প্রোগ্রামিং করা যায়। এখানে, আমি দুটি উদাহরণ দিবো যেখানে TCP এবং UDP প্রোটোকল ব্যবহার করে ক্লায়েন্ট এবং সার্ভার প্রোগ্রাম তৈরি করা হয়েছে।


১. TCP Server-Client উদাহরণ

TCP Server (Server-Side)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>

#define PORT 65432
#define BUFFER_SIZE 1024

int main() {
    int server_fd, client_fd;
    struct sockaddr_in server_addr, client_addr;
    socklen_t addr_len;
    char buffer[BUFFER_SIZE] = {0};
    
    // সার্ভার সকেট তৈরি
    if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
        perror("socket failed");
        exit(EXIT_FAILURE);
    }

    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = INADDR_ANY;  // সব IP ঠিকানা গ্রহণ করবে
    server_addr.sin_port = htons(PORT);        // পোর্ট নম্বর

    // সার্ভার সকেট বাইন্ড করা
    if (bind(server_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
        perror("bind failed");
        exit(EXIT_FAILURE);
    }

    // ক্লায়েন্ট সংযোগের জন্য অপেক্ষা
    if (listen(server_fd, 3) < 0) {
        perror("listen failed");
        exit(EXIT_FAILURE);
    }
    
    printf("Waiting for connections...\n");

    // ক্লায়েন্ট সংযোগ গ্রহণ
    addr_len = sizeof(client_addr);
    if ((client_fd = accept(server_fd, (struct sockaddr*)&client_addr, &addr_len)) < 0) {
        perror("accept failed");
        exit(EXIT_FAILURE);
    }

    printf("Connected to client\n");

    // ক্লায়েন্ট থেকে ডেটা গ্রহণ
    read(client_fd, buffer, BUFFER_SIZE);
    printf("Client: %s\n", buffer);

    // ক্লায়েন্টকে উত্তর পাঠানো
    send(client_fd, "Hello from server!", 18, 0);
    printf("Message sent to client\n");

    close(client_fd);
    close(server_fd);
    
    return 0;
}

TCP Client (Client-Side)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>

#define PORT 65432
#define BUFFER_SIZE 1024

int main() {
    int sock;
    struct sockaddr_in server_addr;
    char buffer[BUFFER_SIZE] = {0};
    
    // ক্লায়েন্ট সকেট তৈরি
    if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
        perror("socket failed");
        exit(EXIT_FAILURE);
    }

    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(PORT);
    
    // সার্ভারের IP ঠিকানা নির্ধারণ
    if (inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr) <= 0) {
        perror("Invalid address");
        exit(EXIT_FAILURE);
    }

    // সার্ভারের সাথে সংযোগ স্থাপন
    if (connect(sock, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
        perror("connection failed");
        exit(EXIT_FAILURE);
    }

    // সার্ভারে বার্তা পাঠানো
    send(sock, "Hello from client!", 18, 0);
    printf("Message sent to server\n");

    // সার্ভার থেকে উত্তর গ্রহণ
    read(sock, buffer, BUFFER_SIZE);
    printf("Server: %s\n", buffer);

    close(sock);
    
    return 0;
}

ব্যাখ্যা:

  • TCP Server: সার্ভার একটি সকেট তৈরি করে, ক্লায়েন্টের সংযোগ শোনে এবং একটি ক্লায়েন্টের সংযোগ গ্রহণ করে। তারপর ক্লায়েন্টের কাছ থেকে ডেটা গ্রহণ করে এবং একটি উত্তর পাঠায়।
  • TCP Client: ক্লায়েন্ট একটি সকেট তৈরি করে এবং সার্ভারের সাথে সংযোগ স্থাপন করে। ক্লায়েন্ট সার্ভারে একটি বার্তা পাঠায় এবং সার্ভার থেকে একটি উত্তর গ্রহণ করে।

২. UDP Server-Client উদাহরণ

UDP Server (Server-Side)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>

#define PORT 65432
#define BUFFER_SIZE 1024

int main() {
    int sock;
    struct sockaddr_in server_addr, client_addr;
    socklen_t addr_len;
    char buffer[BUFFER_SIZE] = {0};
    
    // UDP সার্ভার সকেট তৈরি
    if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
        perror("socket failed");
        exit(EXIT_FAILURE);
    }

    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = INADDR_ANY;  // সব IP ঠিকানা গ্রহণ করবে
    server_addr.sin_port = htons(PORT);

    // সার্ভারের সাথে বাইন্ড
    if (bind(sock, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
        perror("bind failed");
        exit(EXIT_FAILURE);
    }

    printf("Server is waiting for messages...\n");

    // ক্লায়েন্ট থেকে বার্তা গ্রহণ
    addr_len = sizeof(client_addr);
    recvfrom(sock, buffer, BUFFER_SIZE, 0, (struct sockaddr*)&client_addr, &addr_len);
    printf("Client: %s\n", buffer);

    // ক্লায়েন্টকে উত্তর পাঠানো
    sendto(sock, "Hello from UDP server!", 22, 0, (struct sockaddr*)&client_addr, addr_len);
    printf("Message sent to client\n");

    close(sock);
    
    return 0;
}

UDP Client (Client-Side)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>

#define PORT 65432
#define BUFFER_SIZE 1024

int main() {
    int sock;
    struct sockaddr_in server_addr;
    char buffer[BUFFER_SIZE] = {0};
    
    // UDP ক্লায়েন্ট সকেট তৈরি
    if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
        perror("socket failed");
        exit(EXIT_FAILURE);
    }

    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(PORT);
    
    // সার্ভারের IP ঠিকানা নির্ধারণ
    if (inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr) <= 0) {
        perror("Invalid address");
        exit(EXIT_FAILURE);
    }

    // সার্ভারে বার্তা পাঠানো
    sendto(sock, "Hello from UDP client!", 22, 0, (struct sockaddr*)&server_addr, sizeof(server_addr));
    printf("Message sent to server\n");

    // সার্ভার থেকে উত্তর গ্রহণ
    recvfrom(sock, buffer, BUFFER_SIZE, 0, NULL, NULL);
    printf("Server: %s\n", buffer);

    close(sock);
    
    return 0;
}

ব্যাখ্যা:

  • UDP Server: UDP সার্ভার সকেট তৈরি করে এবং একটি নির্দিষ্ট পোর্টে ক্লায়েন্টের বার্তা গ্রহণ করে। পরে সার্ভারে একটি উত্তর পাঠায়।
  • UDP Client: UDP ক্লায়েন্ট সকেট তৈরি করে এবং সার্ভারে বার্তা পাঠায়। সার্ভার থেকে একটি উত্তর গ্রহণ করে।

উপসংহার

এখানে TCP এবং UDP এর মাধ্যমে C প্রোগ্রামিং ভাষায় Server-Client উদাহরণ দেয়া হয়েছে। TCP প্রোটোকল একটি কানেকশন-অরিয়েন্টেড, নির্ভরযোগ্য প্রোটোকল যা সংযোগ স্থাপন এবং ডেটার আদান-প্রদান নিশ্চিত করে, তবে UDP একটি কানেকশনলেস, দ্রুত কিন্তু কম নির্ভরযোগ্য প্রোটোকল। আপনার প্রয়োজন অনুযায়ী আপনি যে প্রোটোকলটি প্রযোজ্য তা বেছে নিতে পারবেন।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion